package com;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * Spring Boot 启动类
 *
 * 这是一个 Spring Boot 应用的启动类，继承了 `SpringBootServletInitializer`，使得该应用能够以传统的 WAR 包部署到外部容器中。
 * 该类主要包含了 Spring Boot 的启动方法以及自定义的 Servlet 初始化配置。
 *
 * @author team10
 */
@SpringBootApplication  // 标注这是一个 Spring Boot 应用的主类
@MapperScan(basePackages = {"com.dao"})  // 扫描指定的包路径，自动扫描 MyBatis 的 Mapper 接口
public class SpringbootSchemaApplication extends SpringBootServletInitializer {

	/**
	 * Spring Boot 应用的启动入口
	 *
	 * 这是应用的 `main` 方法，Spring Boot 会通过 `SpringApplication.run()` 启动应用。
	 *
	 * @param args 命令行参数
	 */
	public static void main(String[] args) {
		SpringApplication.run(SpringbootSchemaApplication.class, args);  // 启动 Spring Boot 应用
	}

	/**
	 * 配置 Spring Boot 应用的 Servlet 容器
	 *
	 * 该方法是为了支持将 Spring Boot 应用部署为传统的 WAR 包，重写了 `configure` 方法，使得应用能够在外部的 Servlet 容器中运行。
	 *
	 * @param applicationBuilder Spring 应用构建器
	 * @return Spring 应用构建器
	 */
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
		return applicationBuilder.sources(SpringbootSchemaApplication.class);  // 配置 Spring Boot 启动类
	}
}
